    /*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ch.fhnw.swa.aufgabenverwaltungswa.business;

import ch.fhnw.swa.aufgabenverwaltungswa.persistenz.Aufgabe;
import ch.fhnw.swa.aufgabenverwaltungswa.persistenz.Mitarbeiter;
import java.util.ArrayList;
import java.util.List;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

/**
 * Diese Klasse verwaltet die Datenbankzugriffe fuer die Aufgaben
 * @author Tobias Neuenschwander
 * @author Benjamin Schatzmann
 * @author Edis Dilji
 * @author Francis Murillo
 */
@Stateless
public class AufgabenbearbeitungEJB {
    //**************************************************************************
    //Variablen
    //**************************************************************************
    @PersistenceContext(name = "ch.fhnw.swa_AufgabenverwaltungSWA_war_1.0-SNAPSHOTPU")
    private EntityManager em;
    
    //**************************************************************************
    //Methoden
    //**************************************************************************
    /**
     * Diese Methode Methode hohlt die Mitarbeiter, deren Ids uebergene wurden aus der
     * Datenbank und gibt sie als ArrayList zurueck
     * @param maIds ArrayList von String mit den Ids der zu hohlenden Mitarbeiter
     * @return ArrayList von Mitarbeitern, deren Ids uebergeben wurden
     */
    private ArrayList<Mitarbeiter> getMaListFromIds(ArrayList<String> maIds){
        ArrayList<Mitarbeiter> newList = new ArrayList<Mitarbeiter>();
        
        for (String sId : maIds){
            //ID in Long parsen
            Long mId = Long.parseLong(sId);
            //Mitarbeiter aus der Datenbank hohlen und in die ArrayList speichern
            newList.add(em.find(Mitarbeiter.class, mId));
        }
        
        return (newList);
    }

    /**
     * Diese Methode speichert die uebergeben Aufgabe in der Datenbank
     * @param aufgabe zu speichernde Aufgabe
     * @param maIds Ids der der Aufgabe zugeteilten Mitarbeiter
     */
    public void saveTask(Aufgabe aufgabe, ArrayList<String> maIds){
        //Aus der String ArrayList mit Ids die Mitarbeiter hohlen und der Aufgabe hinzufuegen
        aufgabe.setMitarbeiterZugeteilt(getMaListFromIds(maIds));
        //Aufgabe in der Datenbank speichern
        em.merge(aufgabe);
    }
    
    /**
     * Diese Methode hohlt alle Aufgaben aus der Datenbank und gibt sie als List zurueck
     * @return Liste mit allen Aufgaben
     */
    public List<Aufgabe> loadTaskList (){
       List<Aufgabe> reList = em.createNamedQuery("findAllTask", Aufgabe.class).getResultList();
       return reList;
    }
    
    /**
     * Diese Methode hohlt alle Mitarbeiter aus der Datenbank und gibt sie als List zurueck
     * @return Liste mit allen Mitarbeitern
     */
    public List<Mitarbeiter> getEmployeeList(){
        List<Mitarbeiter> reList = em.createNamedQuery("findAllEmployee", Mitarbeiter.class).getResultList();
        return (reList);
    }

    /**
     * Diese Methode loescht die Aufgabe, deren Id uebergeben wurde, aus der Datenbank
     * @param taskIdToDel Id der zu loeschenden Aufgabe
     */
    public void deleteTask(Long taskIdToDel){
        //zu loeschende Aufgabe durch Id hohlen und loeschen
        em.remove(findTaskById(taskIdToDel));
    }

    /**
     * Diese Methode hohlt die Aufgabe, deren Id uebergeben wurde, aus der Datenbank
     * @param idToFind Id der zu hohlenden Aufgabe
     * @return Aufgabe, deren Id uebergebn wurde
     */
    public Aufgabe findTaskById(Long idToFind){
        return (em.find(Aufgabe.class, idToFind));
    }
}
